iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
佛心分享-SideProject30

門外漢的嵌入式地獄系列 第 24

Day 24 。初入嵌入式開發- 如何修改 BSP - Kernel 篇

  • 分享至 

  • xImage
  •  

Linux Kernel 是我們最需要修改的地方拉,因為後續所有的程式或者各種功能都在 linux 底下運行,那在這邊的設備樹設定就非常的重要啦。

假如今天我們有 I2C 設備 、 SPI 設備 又或者我們需要 Ethernet 的功能 , 都必須要正確地設定才可以讓程式以及外部的設備在板子上正確運行。

下載 Linux Kernel 的 Source Code

  1. 透過 devtool modify 來下載
devtool modify linux-stm32mp
  1. 透過 menuconfig 來設定 kernel
bitbake linux-stm32mp -c menuconfig

修改設備樹

在設備樹當中可以找到對應的設備樹,開頭會看到 #include 的文件,有些東西會定義到其中,原因是因為同型號的板子例如CPU,i2c 等等,可能比較基本或通用的就會定義到其中。所以假如找不到想要修改的部分可以去看看其他的 include 檔案。

/dts-v1/;
#include "stm32mp157f.dtsi"
#include "stm32mp157f-pinctrl.dtsi"
#include "stm32mp15x-pinctrl.dtsi"
  1. 修改 DDR 大小
memory@80000000 {
		device_type = "memory";
		reg = <0x0 0x80000000 0x0 0x80000000>;
	};
		linux,cma {
			compatible = "shared-dma-pool";
			reusable;
			alloc-ranges = <0 0x80000000 0 0x80000000>;
			size = <0x0 0x40000000>;
			alignment = <0x0 0x2000>;
			linux,cma-default;
		};
  1. 同樣的如果有GPIO 其他的需求也可以一併修改。
/*	gpio-keys {
		compatible = "gpio-keys";

		button-user-1 {
			label = "User-1";
			linux,code = <BTN_1>;
			gpios = <&gpiof 4 GPIO_ACTIVE_HIGH>;
			status = "okay";
		};

		button-user-2 {
			label = "User-2";
			linux,code = <BTN_2>;
			gpios = <&gpiob 6 GPIO_ACTIVE_HIGH>;
			status = "okay";
		};
	};*/

其餘的像是 i2c , spi , ethernet 等等設定,後續幾篇會說明驅動的時候再來一併說明。

儲存成patch

git add . && git commit -m "test"
devtool finish linux-stm32mp /home/ubuntu/stm32mp/layers/meta-custom # 依照個人修改

編譯

bitbake linux-stm32mp

最後說明一下假如想要查看已經編譯好的 dtb 檔案 ,可以透過 dtc 來反編譯回來。

將 dts 編譯生成 dtb

./dtc -I dts -O dtb -o xxx.dtb xxx.dts

將 dtb 反編譯生成 dts

./dtc -I dtb -O dts -o xxx.dts xxx.dtb

後續就會開始說明驅動的部分拉,有關於各式的外圍設備該如何去編寫設備樹以及如何測試,都會放到後面幾篇文章來說明。


上一篇
Day 23 。初入嵌入式開發- 如何修改 BSP - Uboot 篇
下一篇
Day 25 。初入嵌入式開發- CAN 驅動開發(一)
系列文
門外漢的嵌入式地獄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言